/*
 * Copyright © 2011 Nokia Corporation. All rights reserved.
 * Nokia and Nokia Connecting People are registered trademarks of Nokia Corporation. 
 * Oracle and Java are trademarks or registered trademarks of Oracle and/or its
 * affiliates. Other product and company names mentioned herein may be trademarks
 * or trade names of their respective owners. 
 * See LICENSE.TXT for license information.
 */

package com.nokia.example.compass.views;

import com.nokia.example.compass.CompassMidlet;
import com.nokia.example.compass.LandmarkManager;
import com.nokia.example.compass.helpers.ImageLoader;
import com.nokia.example.compass.helpers.KeyCodes;
import java.io.IOException;

import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.location.QualifiedCoordinates;

public class AddLandmarkView {

    private Image background;

    private Image locator_input;
    private Image locator_input_highlight;

    private boolean ishighlight = false;

    private boolean isShown = false;
    private String landmarkname = "";
    private String shortenedName = "";

    private LandmarkNameBox box;

    private LandmarkManager manager;

    private int y = 240;

    private boolean hide = false;
    private static final int default_anchor = Graphics.TOP|Graphics.LEFT;
    
    public AddLandmarkView(CompassView view) {
        
        loadImages();
        box = new LandmarkNameBox(this);
        manager = new LandmarkManager();
    }

    private void loadImages() {
        try {
            background = ImageLoader.getInstance().loadImage("/menu-background.png");
            locator_input = ImageLoader.getInstance().loadImage("/locator-input.png");
            locator_input_highlight = ImageLoader.getInstance().loadImage("/locator-input-highlight.png");
        }catch(IOException io) {
            System.out.println("IOError:"+io.getMessage());
        }
    }

    public void draw(Graphics g) {
        
        if(isShown) {
            //animate
            if(y > 0 && !hide) {
                y -= 40;
                g.setClip(0, y, 240, 320 -y);
            }else if(hide && y < 320) {
                y += 40;
                g.setClip(0, y, 240, 320 -y);
                if(y == 320) {
                    isShown = false;
                    hide = false;
                }
            }
            g.drawImage(background, 0, y, default_anchor);
            g.setColor(0xFFFFFF);
            g.setFont(CompassView.SMALL_FONT);
            g.drawString("Save current location",120 ,y + 100, Graphics.TOP|Graphics.HCENTER);
            g.drawString("cancel", 240, y+320, Graphics.BOTTOM| Graphics.RIGHT);
            g.drawString("Save", 0, y+320, g.BOTTOM|g.LEFT);
            g.drawString("name:", 20,y+ 242- CompassView.SMALL_FONT.getHeight(), default_anchor);
            if(!ishighlight) {
                g.drawImage(locator_input, 0,y+ 242, default_anchor);
            }else {
                g.drawImage(locator_input_highlight, 0,y+ 242, default_anchor);
                g.drawString("Write", 120,y+ 320, g.HCENTER|g.BOTTOM);
            }
            g.drawString(shortenedName,120,y+ 242, g.HCENTER|g.TOP);
            
        }
    }
    public void show() {
        shortenedName = "";
        landmarkname = "";
        isShown = true;
        y = 240;
    }
    public boolean isShown() {
        return isShown;
    }

    public void notifyKeyEvents(int keyCode) {
        
        switch(keyCode) {
            case KeyCodes.RIGHT_SOFTKEY:
                hide = true;
                y = 80;
                break;
            case KeyCodes.LEFT_SOFTKEY:
                if (landmarkname.length() > 0) {
                    QualifiedCoordinates coords = CompassMidlet.getInstance().getCompassView().getCurrentCoordinates();
                    if (manager.saveLandmark(landmarkname, coords)) {
                        isShown = false;
                        CompassMidlet.getInstance().showAlert("Saved!");
                        CompassMidlet.getInstance().getCompassView().refreshLandmarks();
                    }
                }else {
                    CompassMidlet.getInstance().showAlert("Name missing!", AlertType.ERROR);
                }
                break;
            case KeyCodes.DOWN:
            case KeyCodes.UP:
                if(ishighlight) {
                    ishighlight = false;
                }else {
                    ishighlight = true;
                }
                break;
            case KeyCodes.MIDDLE_SOFT_KEY:
                if(ishighlight) {
                    Display.getDisplay(CompassMidlet.getInstance()).setCurrent(box);

                }
                break;
        }

    }
    public void setLandmarkName(String name) {
        landmarkname = name;
        int l = landmarkname.length();
        if(CompassView.SMALL_FONT.stringWidth(landmarkname) > 180) {
            for(int i = l -1; i > 0; i--) {
                if(CompassView.SMALL_FONT.substringWidth(landmarkname, 0, i) < 180) {
                    shortenedName = landmarkname.substring(0, (i - 3)) + "...";
                    break;
                }
            }
         }else {
            shortenedName = landmarkname;
         }
    }
    
}
